#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
using std::cout;
using std::endl;


// // 进程替换
// int main()
// {
//     cout << "当前进程的代码: " << endl;
//     execl("/usr/bin/ls", "ls", "-l", nullptr);
//     cout << "当前进程结束: " << endl;
//     return 0;
// }


// 接口测试
#define NUM 16
int main(int argc, char* argv[], char* env[])
{
    char* const _env[NUM] = {(char*)"MY_105_VAL=88777666555", nullptr};
    pid_t id = fork();
    if (id == 0)
    {
        // 子进程
        cout << "子进程开始运行, pid: " << getpid() << endl;
        sleep(3);
        char* const _argv[NUM] = {(char*)"ls", (char*)"-a", (char*)"-l", nullptr};

        // 使用系统的命令程序
        //execl("/usr/bin/ls", "ls", nullptr);
        //execv("/usr/bin/ls", _argv);    // l 和 v 是传参的凡是不同
        //execlp("ls", "ls", "-a", nullptr);   // p 你只需要给我程序的路径,我会在环境变量的路径中找
        //execvp("ls", _argv);  // 用法和execp一样，只是不用给具体路径了

        // 换成自己的程序
        //execl("/home/np/learning_node/review_linux/review_code4/test_code", "test_code", "-a", nullptr);
        execlp("/home/np/learning_node/review_linux/review_code4/test_code", "test_code", "-b", nullptr);

        exit(1);
    }
    else if (id > 0)
    {
        // 父进程
        cout << "父进程开始运行, pid: " << getpid() << endl;
        int status = 0;
        pid_t ret = waitpid(-1, &status, 0); // 阻塞等待
        if (ret > 0)
        {
            cout << "wait success, exit code: " << WEXITSTATUS(status) << endl;
        }
    }

    return 0;
}